8. 理解 Tokenizer
什么是 Tokenizer(分词器)?

如果只用一句话解释:
Tokenizer 就是大模型和人类语言之间的翻译器。
它负责把文本变成数字(Token ID),再把数字还原成文本。
因为神经网络根本不认识:
你好
ChatGPT
Transformer
它只认识:
[1532, 8756, 42, 998]
所以在进入模型之前,必须经过 Tokenizer。
为什么需要 Tokenizer?
假设有一句话:
我喜欢机器学习
计算机看到的其实只是:
UTF-8字节流
而 Transformer 的输入要求是:
Embedding向量
中间必须经过:
文字
↓
Tokenizer
↓
Token ID
↓
Embedding
↓
Transformer
完整流程:
"我喜欢机器学习"
│
▼
Tokenizer
│
▼
[315, 892, 1256, 87]
│
▼
Embedding
│
▼
[[0.1,0.3,...],
[0.7,0.2,...],
...]
最早的做法:按单词切分
例如:
I love machine learning
直接按空格切:
["I", "love", "machine", "learning"]
然后建立词表:
I → 1
love → 2
machine → 3
learning → 4
变成:
[1,2,3,4]
看起来很简单。
但问题巨大。
问题1:词表会无限大
例如:
dog
dogs
dogging
dogged
到底算几个词?
再比如:
ChatGPT
ChatGPT-4
ChatGPT-5
ChatGPT-Pro
新词天天出现。
如果全部加入词表:
词表 = 无限大
模型根本存不下。
问题2:遇到新词怎么办?
训练时:
apple
banana
orange
测试时:
watermelon
词表里没有:
watermelon
就变成:
<UNK>
(Unknown)
信息直接丢失。
所以出现了 Subword(子词)
现代大模型几乎都采用:
Subword Tokenization
核心思想:
不按单词切,而按“常见片段”切。
例如:
unbelievable
切成:
un
believe
able
即使没见过:
unbelievably
也能切:
un
believe
ably
模型依然能理解。
BPE:GPT 系列经典方案
现代 Tokenizer 的祖师爷之一:
Byte Pair Encoding (BPE)
最早用于压缩算法,后来被 NLP 使用。
GPT-2、GPT-3 的 tokenizer 基本都属于 BPE 家族。Causal
BPE 是怎么训练出来的?
假设语料:
low
lower
lowest
初始状态:
l o w
l o w e r
l o w e s t
统计最常出现的相邻字符:
l + o
出现很多次。
合并:
lo
得到:
lo w
lo w e r
lo w e s t
继续统计:
lo + w
继续合并:
low
最终:
low
er
est
成为词表。
举个真实例子
GPT Tokenizer 可能会把:
understanding
切成:
under
stand
ing
因为这些片段出现频率很高。
而不会切成:
u
n
d
e
r
...
这样效率太低。
Token 不等于字
很多初学者容易误解:
1 Token = 1 个字
实际上不是。
例如:
hello
可能是:
["hello"]
1 Token。
中文:
你好
可能:
["你", "好"]
2 Token。
复杂词:
internationalization
可能:
["inter",
"national",
"ization"]
3 Token。
所以:
字符数 ≠ Token数
Tokenizer 是如何训练的?
现代 Tokenizer(BPE、SentencePiece)通常经历:
第一步:收集语料
例如:
Wikipedia
Common Crawl
Books
Github
几十 TB 数据。
第二步:统计频率
统计:
机器
学习
深度学习
Transformer
出现次数。
第三步:构建词表
保留最常见的:
50000
100000
128000
个 Token。
例如 Llama 系列常见规模约为十万级词表。Causal
SentencePiece
2018 年 Google 提出了著名的:
其特点是:
不依赖空格
传统英文:
I love AI
先按空格切。
SentencePiece:
I▁love▁AI
把空格本身也作为符号学习。
因此:
英文
中文
日文
韩文
都能统一处理。(Hugging Face)
Tokenizer 在训练中的位置
完整训练链路:

可以理解为:
Tokenizer = 编译器前端
Transformer 则是:
CPU
CPU 不认识高级语言。
Transformer 不认识自然语言。
都需要先翻译。
一个直观例子
输入:
我爱北京天安门
Tokenizer 可能输出:
["我",
"爱",
"北京",
"天安门"]
对应 ID:
[128, 52, 981, 3476]
进入 Embedding:
128 → 向量A
52 → 向量B
981 → 向量C
3476→ 向量D
最终形成:
[B,L,D] = [1,4,4096]
送入 Transformer。
从训练大模型的角度理解
你正在学习从零训练大模型,可以把 Tokenizer 看成:
Tokenizer = 把文本压缩成模型能处理的离散符号
它主要解决三个问题:
1. 文本如何数字化
2. 未登录词(OOV)如何处理
3. 词表大小如何控制
因此整个训练流程实际上是:
海量文本
│
▼
Tokenizer训练
│
▼
生成词表(vocab)
│
▼
文本→Token
│
▼
Embedding训练
│
▼
Transformer训练
可以说:
Tokenizer 是整个大模型训练流水线的第一步。没有 Tokenizer,就没有后面的 Embedding、Attention 和 Transformer。